package ee.ajapaik.android.fragment;
import java.io.File;
import java.util.Date;
import com.facebook.Session;
import ee.ajapaik.android.Constants;
import org.apache.http.HttpVersion;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import ee.ajapaik.android.external.bitmaputil.ImageFetcher;
import ee.ajapaik.android.AjapaikApplication;
import ee.ajapaik.android.ConfirmActivity;
import ee.ajapaik.android.DetailsActivity;
import ee.ajapaik.android.MainActivity;
import ee.ajapaik.android.R;
import ee.ajapaik.android.network.ProgressMultipartEntity;
import ee.ajapaik.android.network.ProgressMultipartEntity.Listener;
public class ConfirmFragment extends Fragment {
private int id;
private String filePath;
public static final String TAG = "ConfirmFragment";
private ImageFetcher imageFetcher;
public static Fragment newInstance() {
return new ConfirmFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup vg, Bundle savedInstanceState) {
Log.d(TAG, "ID=" + getActivity().getIntent().getIntExtra(ConfirmActivity.EXTRA_ID, -1));
Log.d(TAG, "File=" + getActivity().getIntent().getStringExtra(ConfirmActivity.EXTRA_FILE));
Log.d(TAG, "SF=" + getActivity().getIntent().getFloatExtra(ConfirmActivity.EXTRA_SCALE_FACTOR, 1.0f));
int w = getResources().getDisplayMetrics().widthPixels;
int h = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 240.0f, getResources().getDisplayMetrics());
imageFetcher = new ImageFetcher(getActivity(), w, h, false);
id = getActivity().getIntent().getIntExtra(DetailsActivity.EXTRA_ID, -1);
filePath = getActivity().getIntent().getStringExtra(ConfirmActivity.EXTRA_FILE);
View v = inflater.inflate(R.layout.confirm, null);
imageFetcher.loadImage(String.format("https://%s/foto_url/%d/", Constants.BACKEND_HOST, id), (ImageView) v.findViewById(R.id.oldPic));
// grab the file. ui thread, don't care.
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bmp = BitmapFactory.decodeFile(filePath, opts);
((ImageView) v.findViewById(R.id.newPic)).setImageBitmap(bmp);
v.findViewById(R.id.btnOk).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO show diag
((ConfirmActivity) getActivity()).fbLogin();
}
});
return v;
}
public void onFbLoginComplete() {
Uploader uploader = new Uploader();
uploader.execute();
}
private class Uploader extends AsyncTask<Void, Long, Void> implements Listener {
ProgressDialogFragment frag = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
frag = new ProgressDialogFragment((int)(new File(filePath).length()));
frag.show(getFragmentManager(), "ProgressDialogFragment");
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
frag.dismissAllowingStateLoss();
frag = null;
Toast.makeText(getActivity(), "Ülepildistus saadetud", Toast.LENGTH_SHORT).show();
Intent i = new Intent(getActivity(), MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
@Override
protected void onProgressUpdate(Long... values) {
super.onProgressUpdate(values);
frag.getDialog().setProgress(values[0].intValue());
}
@Override
protected Void doInBackground(Void... nothing) {
try {
HttpParams params = new BasicHttpParams();
params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
DefaultHttpClient httpClient = new DefaultHttpClient(params);
HttpPost post = new HttpPost(String.format("https://%s/foto/%d/upload/", Constants.BACKEND_HOST, id));
MultipartEntity entity = new ProgressMultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, this);
Date date = new Date();
entity.addPart("user_file[]", new FileBody(new File(filePath)));
entity.addPart("year", new StringBody(String.valueOf(date.getYear())));
entity.addPart("month", new StringBody(String.valueOf(date.getMonth())));
entity.addPart("day", new StringBody(String.valueOf(date.getDay())));
float sf = getActivity().getIntent().getFloatExtra(ConfirmActivity.EXTRA_SCALE_FACTOR, 1.0f);
entity.addPart("scale_factor", new StringBody(String.valueOf(sf)));
Log.d(TAG, "scale factor:" + sf);
// lets hope its recent enough?
Location loc = AjapaikApplication.loc;
if (loc != null && System.currentTimeMillis() - loc.getTime() < 30000L) {
entity.addPart("lat", new StringBody(String.valueOf(loc.getLatitude())));
entity.addPart("lon", new StringBody(String.valueOf(loc.getLongitude())));
}
float[] orientation = AjapaikApplication.getOrientation();
if (orientation != null) {
entity.addPart("yaw", new StringBody(String.valueOf(orientation[0])));
entity.addPart("pitch", new StringBody(String.valueOf(orientation[1])));
entity.addPart("roll", new StringBody(String.valueOf(orientation[2])));
Log.d(TAG, "yaw: " + orientation[0]);
Log.d(TAG, "pitch: " + orientation[1]);
Log.d(TAG, "roll: " + orientation[2]);
}
Session sess = Session.getActiveSession();
if (sess != null && sess.isOpened()) {
entity.addPart("fb_access_token", new StringBody(sess.getAccessToken()));
entity.addPart("fb_application_id", new StringBody(sess.getApplicationId()));
}
post.setEntity(entity);
httpClient.execute(post);
} catch (Exception e) {
Log.e(TAG, "Upload failed", e);
}
return null;
}
@Override
public void onProgress(long progress) {
publishProgress(progress);
}
}
}